const fs = require('fs')
const path = require('path')
const jwt = require('jsonwebtoken')
const { tokenSecretKey } = require('../config') // 这是加密的key（密钥）

module.exports = {
  // 生成token
  generateToken: function (userId) {
    const token = jwt.sign({ userId }, tokenSecretKey, {
      expiresIn: 60 * 60 // 1小时
    })
    return token
  },
  // token检验
  verifyToken (token) {
    return new Promise((resolve, reject) => {
      jwt.verify(token, tokenSecretKey, function (err, decode) {
        const result = {}
        if (err) { // 无效token
          result.type = 'error'
          result.data = err
          reject(result)
        } else {
          result.type = 'success'
          result.data = decode
          resolve(result)
        }
      })
    })
  },
  /**
   * 获取所有文件的路径
   * @param {*} baseDir // 根路径
   * @param {*} bool true:包含所有子目录的文件 false:只查询更目录的文件
   * @param {*} reg // 检验不需要筛选的目录
   */
  getAllDir (baseDir, bool, reg) {
    let result = [] // 所有文件路径的集合
    const getDirList = (dir) => {
      let dirs = fs.readdirSync(dir)
      dirs.forEach(file => {
        let _dir = path.join(dir, file)
        let stats = fs.statSync(_dir)
        let isFile = stats.isFile() // 判断是否是文件
        if (isFile) { // 文件时
          if (!reg || !reg.test(_dir)) { // 正则校验是否需要添加该目录
            result.push(_dir)
          }
        } else if (bool) { // 非文件时，是否需要递归
          getDirList(_dir)
        }
      })
    }
    getDirList(baseDir)
    return result
  }
}
